using System;
using System.Collections;
using Curriculum.Business.Clases;
using Curriculum.Business.ClasesPersistentes;
using Curriculum.Business.Manejadores;

namespace Curriculum.UI.Helper
{
	/// <summary>
	/// Summary description for TreeViewHelper.
	/// </summary>
	public class TreeViewHelper
	{

		#region - TreeView Estructura -

		private static void AddNode(Antecedente inAntecedente, MyTreeNode inTreeNode)
		{
			MyTreeNode tNode;
			int i=0;
			if(inAntecedente.Antecedentes != null)
			{
				Antecedente[] hijos = inAntecedente.Antecedentes;
				foreach(Antecedente objAntecente in hijos)
				{
					MyTreeNode auxNode = new MyTreeNode();
					auxNode.Id = objAntecente.IdAntecente;
					auxNode.Text = objAntecente.Nombre;
					inTreeNode.Nodes.Add(auxNode);					
					tNode = (MyTreeNode) inTreeNode.Nodes[i];
					AddNode(objAntecente, tNode);
					i++;		
				}			
			}
		}               

		
		public static void CargarArbol(System.Windows.Forms.TreeView treeViewEstructura, Antecedente raiz)
		{

			// SECTION 2. Initialize the TreeView control.
			treeViewEstructura.Nodes.Clear();
			MyTreeNode nodoRaiz = new MyTreeNode();
			nodoRaiz.Id = "0";//raiz.IdAntecente;
			nodoRaiz.Text = "antecedentes";//raiz.Nombre;
			treeViewEstructura.Nodes.Add(nodoRaiz);
			MyTreeNode tNode = new MyTreeNode();
			tNode = (MyTreeNode) treeViewEstructura.Nodes[0];

			// SECTION 3. Populate the TreeView with the DOM nodes.
			AddNode(raiz, tNode);
			treeViewEstructura.ExpandAll();			
		}

		#endregion - TreeView Estructura -

		#region - TreeView Datos -

		private static void AddNodeAntecedente(AntecedentePersistente antecedentePersistente, MyTreeNode inTreeNode)
		{

			int i=1;
			
			// cargo el nodo atributos
			MyTreeNode aNode = new MyTreeNode();
			aNode.Id = "-1";
			aNode.Text = "atributos";
			inTreeNode.Nodes.Add(aNode);
			MyTreeNode tInNode = (MyTreeNode) inTreeNode.Nodes[0];

			MasterData masterData = MasterData.GetInstancia();
			// cargo los atributos
			if(antecedentePersistente.AtributosPersistentes != null)
			{
				//IList atributos = antecedentePersistente.AtributosPersistentes;
				AtributosPersistentes atributos = antecedentePersistente.AtributosPersistentes;
				foreach(AtributoPersistente objAtributoPersistente in atributos)
				{
					MyTreeNode auxNode = new MyTreeNode();
					auxNode.Id = objAtributoPersistente.IdAtributo;
					string tipo =masterData.GetAtributo(objAtributoPersistente.IdAtributo).tipo;
					if(tipo=="2")
						auxNode.Text = masterData.GetAtributo(objAtributoPersistente.IdAtributo).nombre + " : " + NameHelper.ObtenerNombreOpcionCombo(objAtributoPersistente.Valor);						
					else
						auxNode.Text = masterData.GetAtributo(objAtributoPersistente.IdAtributo).nombre + " : " + objAtributoPersistente.Valor;
					tInNode.Nodes.Add(auxNode);					
				}			
			}
			MyTreeNode tNode;

			// cargo los antecedentes
			if(antecedentePersistente.AntecedentesPersistentes != null)
			{
				//IList hijos = antecedentePersistente.AntecedentesPersistentes;
				AntecedentesPersistentes hijos = antecedentePersistente.AntecedentesPersistentes;
				foreach(AntecedentePersistente objAntecentePersistente in hijos)
				{
					MyTreeNode auxNode = new MyTreeNode();
					auxNode.Id = objAntecentePersistente.IdAntecedentePersistente; 
					//auxNode.Text = "NombreAntecedente " + i.ToString();
					auxNode.Text = Helper.NameHelper.ObtenerNombreAntecedente(objAntecentePersistente.IdAntecedente) + " " + i.ToString();
					inTreeNode.Nodes.Add(auxNode);					
					tNode = (MyTreeNode) inTreeNode.Nodes[i];
					AddNodeAntecedente(objAntecentePersistente, tNode);
					i++;		
				}			
			}
		}               
				
		public static void CargarArbolAntecedentes(System.Windows.Forms.TreeView treeViewAntecedentes, AntecedentesPersistentes antecedentesPersistences)
		{

			// SECTION 2. Initialize the TreeView control.
			treeViewAntecedentes.Nodes.Clear();
			MyTreeNode nodoRaiz = new MyTreeNode();
			nodoRaiz.Id = "0";
			nodoRaiz.Text = "antecedentes";
			treeViewAntecedentes.Nodes.Add(nodoRaiz);
			MyTreeNode tNode = new MyTreeNode();
			tNode = (MyTreeNode) treeViewAntecedentes.Nodes[0];

			// SECTION 3. Populate the TreeView with the DOM nodes.
			int i=0;
			foreach(AntecedentePersistente objAntecedentePersistente in antecedentesPersistences)
			{
				MyTreeNode tNodoAntecedente = new MyTreeNode();
				tNodoAntecedente.Id = objAntecedentePersistente.IdAntecedentePersistente;
				tNodoAntecedente.Text = Helper.NameHelper.ConstruirNombreAntecedenteRaiz(objAntecedentePersistente) +  " " + i.ToString();
				tNode.Nodes.Add(tNodoAntecedente);				
				MyTreeNode tNodo = (MyTreeNode) tNode.Nodes[i];
				AddNodeAntecedente(objAntecedentePersistente, tNodo);
				i++;
			}
			treeViewAntecedentes.Nodes[0].Expand();
		}
		#endregion - TreeView Datos -

		#region - Funciones varias

		/// <summary>
		/// Obtiene el ID del Antecedente Seleccionado 
		/// en el arbol de antecedentes
		/// </summary>
		/// <param name="tNode"></param>
		/// <returns></returns>
		public static string GetIDAntecedentePersistente(MyTreeNode tNode)
		{
			string id = "0";
			while(tNode.Id != "0")
			{
				id = tNode.Id;
				tNode = (MyTreeNode)tNode.Parent;
			}			
			return id;
		}

		#endregion - Funciones varias



	}
}
